package com.java.zhuiyun.api.sysrole.controller;

import com.java.zhuiyun.api.sysrole.entity.Role;
import com.java.zhuiyun.api.sysrole.service.IRoleService;
import com.java.zhuiyun.common.response.CommonResult;
import com.java.zhuiyun.util.pageUtil.PageRequest;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * @ClassName RoleController
 * @Description TODO 角色管理 用于给用户分配角色和权限
 * @Author xy
 * @Date 2023/8/16 15:47
 **/
@RestController
@Api(tags = "角色管理")
@RequestMapping("/Role")
@Slf4j
public class RoleController {
    @Resource
    IRoleService roleService;

    /**
     * @Author xy
     * @Description todo 角色管理的全查 （后台管理）
     * @Date 2023/8/15 18:50
     * @Return CommonResult 返回类型
     * @param role 角色实体类
     * @param pageRequest 分页
     */
    @GetMapping("/RoleList")
    @ApiOperation(value = "全查")
    public CommonResult RoleList(Role role, PageRequest pageRequest){
        return CommonResult.ok(roleService.RoleList(role,pageRequest));
    }

    /**
     * @Author xy
     * @Description todo 角色管理的添加 （后台管理）
     * @Date 2023/8/15 20:14
     * @Return CommonResult 返回类型
     * @param role 角色实体类
     */
    @PostMapping("/RoleAdd")
    @ApiOperation(value = "添加")
    public CommonResult RoleAdd(@RequestBody Role role){
        int i = roleService.RoleAdd(role);
        if (i>0){
            return CommonResult.ok("恭喜您，添加成功");
        }else {
            return CommonResult.error("很抱歉，添加失败");
        }
    }

    /**
     * @Author xy
     * @Description todo 角色管理的修改 (后台管理)
     * @Date 2023/8/15 16:26
     * @Return CommonResult 返回类型
     * @param role 角色实体类
     */
    @PostMapping("/RoleUpdate")
    @ApiOperation(value = "修改")
    public CommonResult RoleUpdate(@RequestBody Role role){
        int i = roleService.RoleUpdate(role);
        if (i>0){
            return CommonResult.ok("恭喜您，修改成功");
        }else {
            return CommonResult.error("很抱歉，修改失败");
        }
    }

    /**
     * @Author xy
     * @Description todo 角色管理的逻辑删除 （后台管理）
     * @Date 2023/8/15 16:41
     * @Return CommonResult 返回类型
     * @param id 角色id
     */
    @DeleteMapping("/RoleDelete")
    @ApiOperation(value = "删除")
    public CommonResult RoleDelete(Integer id){
        int i = roleService.RoleDelete(id);
        if (i>0){
            return CommonResult.ok("恭喜您，删除成功");
        }else {
            return CommonResult.error("很抱歉，删除失败");
        }
    }

    /**
    * @Author xy
    * @Description todo 绑定角色和菜单的关系 （后台管理）
    * @Date 2023/10/12 11:17
    * @Return CommonResult 返回类型
    * @param roleId 角色id
    * @param menuIds 菜单id数组
    */
    @PostMapping("/roleMenu/{roleId}")
    @ApiOperation(value = "添加")
    public CommonResult roleMenu(@PathVariable Integer roleId, @RequestBody List<Integer> menuIds) {
        roleService.setRoleMenu(roleId, menuIds);
        return CommonResult.ok();
    }

    /**
    * @Author xy
    * @Description todo 获取角色绑定的菜单 （后台管理）
    * @Date 2023/10/12 11:21
    * @Return CommonResult 返回类型
    * @param roleId 角色id
    */
    @GetMapping("/roleMenu/{roleId}")
    @ApiOperation(value = "查询")
    public CommonResult getRoleMenu(@PathVariable Integer roleId) {
        return CommonResult.ok( roleService.getRoleMenu(roleId));
    }
}
